精华内容
下载资源
问答
  • 2021-10-13 16:10:26

    指针的经典例题

    例题1:

    struct test
    	{
    		int num;
    		char  *pcName;
    		short date;
    		char  ch[2];
    		short arr[4];
    	}*p;
    假设p的值是0x100000.求下列表达式的值
    p+0x1 = 0x100014;
    (unsigned long)p+0x1 = 0x100001;
    (unsigned int *)+0x1 = 0x100004;
    
    注:sizeof(struct test) = 20
    

    例题2:

    int main()
    {
    	int a[4]={1,2,3,4};
    	int *ptr1=(int *)(&a+1);
    	  
    	int *ptr2=(int *)((int)a+1);
    	
    	printf("%x,%x\n",ptr1[-1],*ptr2);
    	return 0;
    } 
    
    注:
    1.单独数组名取地址代表整个数组,加1表示“下一个数组的首地址”,(&a+1)也就是4后面的位置
    2.单独数组名表示首元素的首地址,被强转成整形再加1,((int)a+1)也就是第一个元素后三个字节和第二个元素的第一个字节
    
    结果为:4,0x100 (1<<8)
    

    例题3:

    int main()
    {
    	int a[5][5];
    	int(*p)[4];
    	p = a;
    	
    	printf("%d\n",&p[4][2]-&a[4][2]);
    	
        return 0;
    }
    注:&p[4][2]-&a[4][2] 等于 之间相差元素的个数
    1.&p[4][2]相对于首元素偏移18个元素
    2.&a[4][2]相对于首元素偏移22个元素
    结果:-4
    
    更多相关内容
  • } void sortReplication(){ //有四个字符串,实现将他们按照字符串中的字符个数从小到大排序, //再分别取出每个字符串的第三个字母形成一个新的字符串输出(若少于三个字符的输出*), //要求:利用字符串指针和...
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>	
    #include <conio.h>
    #include <ctype.h>
    #include <math.h>
    #include <time.h>
    #define IO 996
    #define N 10
    #define input "%d,%d,%d,%d\n\n"
    
    void product();
    void sortReplication();
    void sort();
    void swap(int *,int);
    void exchange();
    void frequency();
    int subString(char *,char *);
    
    int main(int argc,char *argv[]){
    
    //product();
    //sortReplication();
    //sort();
    //exchange();
    //frequency();
    
    } 
    
    void product(){
    	//已知一个整形数组X[4],其元素值分别为3/10/4/20,使用指针求个数字元素的积。
    	int x[]={3,10,4,20},i,product=1,*xp=&x[0];
    	for(i=0;i<4;i++){
    		product*=*(xp+i);//*xp+i
    		//printf("%d\n",i);
    		//printf("%d\n",*xp);
    		//printf("%d\n",*xp+i);
    		//printf("%d\n\n",product);
    	}
    	printf("%d\n\n",product);
    }
    
    
    void sortReplication(){
    
    	//有四个字符串,实现将他们按照字符串中的字符个数从小到大排序,
    	//再分别取出每个字符串的第三个字母形成一个新的字符串输出(若少于三个字符的输出*),
    	//要求:利用字符串指针和指针数组完成。
    
    	char *array[5]={"yangmufa","shuai","de","chaojishuai",}\
    	,(*tem)=NULL,t[5]={NULL};
    	int i=0,j=0,k=0;
    
    	for(i=0;i<4;i++){//i<4-1表示从第一个开始到倒数第二个结束(4个数组)
    		k=i;//记录小串
    		for(j=0;j<4;j++){//表示从第二个开始到倒数第一个结束,每一次比上一次比较次数减一	
    			if(strlen(array[k])>strlen(array[j])){
    				k=j;//记录小串
    			}
    			if(i!=k){//交换
    				tem=array[i];
    				array[i]=array[k];
    				array[k]=tem;
    			}
    		}	
    	}
    	//分别取出每个字符串的第三个字母形成一个新的字符串
    	for(i=0;i<4;i++){
    		puts(*(array+i));
    		if(strlen(*(array+i))>2){
    			//*(*(array+4)+i)=*(*(array+1)+2);
    			//此方法不可取因为"String"是存在静态存储区的,这个地址中的值不能被修改。
    			t[i]=*(*(array+i)+2);
    		}else if(strlen(*(array+i))<3){
    			t[i]='*';
    		}
    	}
    	printf("\n新字符串:%s\n\n",t);
    }
    
    
    void sort(){
    
    	//定义一个动态数组长度为n,用随机数给各数组元素赋值,
    	//然后对数组各单元排序,定义swap函数交换数据单元,要求参数使用指针传递。
    
    	int n,i,*array;
    	printf("输入长度:");
    	scanf_s("%d",&n);
    	array=(int*)malloc(n*sizeof(int));//以N为基数动态反配N个int类型大小的内存
    	srand((unsigned)time(NULL));//设置以时间为随机种子
    	printf("随机数排序前:");
    	for(i=0;i<n;i++){
    		array[i]=rand();//获取以时间为种子得来的随机数后赋值给array
    		printf(" %d ",array[i]);
    	}
    	printf("\n");
    	swap(array,n);	
    }
    void swap(int * array,int lenth){
    	int i=0,j=0,k=0,temp;
    	printf("\n随机数排序后:");
    	for(i;i<lenth;i++){
    		k=i;
    		for(j=0;j<lenth;j++){
    			if(array[k]<array[j]){k=j;}
    			if(k!=i){
    				temp=array[k];
    				array[k]=array[i];
    				array[i]=temp;
    			}
    		}
    	}
    	for(i=0;i<lenth;i++){
    		printf(" %d ",array[i]);
    	}
    	printf("\n\n");
    }
    
    
    void exchange(){
    
    	//输入N个整数,将其中最小的数与第一个数对换,将自重最大的数与与最大的数交换。
    
    	int array[8],i,j,k,temp=0,max=0,min=0;
    	srand((unsigned)time(NULL));//设置时间种子
    	printf("随机数:");
    	for(i=0;i<8;i++){
    		array[i]=rand();//获取以时间为种子得来的随机数后赋值给array
    		printf(" %d ",array[i]);	
    	}
    
    	printf("\n交换后:");
    	max=array[0];
    	min=array[0];
    	for(i=0;i<8-1;i++){
    		if(max<array[i]){
    			max=array[i];
    		}//求出最大元素
    		if(min>array[i]){
    			min=array[i];
    		}//求出最小元素
    	}
    	array[0]=min;//将其中最小的数与第一个数对换,
    	array[7]=max;//将其中最大的数与与最大的数交换。
    	for(i=0;i<8;i++){
    		printf(" %d ",array[i]);
    	}
    		for(i=0;i<8;i++){
    		k=i;
    		for(j=0;j<8;j++){
    			if(array[k]<array[j]){k=j;}
    			if(k!=i){
    				temp=array[k];
    				array[k]=array[i];
    				array[i]=temp;
    			}
    		}
    	}
    	printf("\n排序后:");
    	for(i=0;i<8;i++){
    		printf(" %d ",array[i]);
    	}
    	printf("\nmax:%d\nmin:%d\n",max,min);
    }
    
    
    
    void frequency(){
    
    	//计算字符串中子串出现的次数,要求用一个subString函数实现,
    	//参数为指向字符串和子字符串的指针,返回次数。
    
    	char array[]={"yangmufchaojiwudidashuaigeyangmufachaojishuai"},\
    		SubString[]={"chaoji"};
    	printf("字符串:");
    	puts(SubString);
    	printf("在字符串:");
    	puts(array);
    	printf("中出现了: ");
    	printf(" %d 次\n",subString(array,SubString));
    
    }
    int subString(char *a,char *s){
    
    	int i=0,j=0,count=0,alen=strlen(a),slen=strlen(s);
    	while(i<alen){
    		if(a[i]==s[j]){
    			//如果子串第j个元素和母串的第i个元素相等则都继续指向下一个元素进行比较
    			i++;
    			j++;
    		}else{
    			//如果子串和母串出现不匹配则母串回到挡轮比较之前,子串归零
    			i=i-j+1;
    			j=0;
    		}
    		if(j==slen){
    			//如果出现子串到最后一个元素均与母串相等的情况则出现次数加一,子串归零继续下一轮比较。
    			count++;
    			j=0;
    		}
    	}
    	return count;
    }

    Result:

    product();

    43e70f9db242c831c5525cf4c89e7367b25.jpg


    sortReplication();

    eb4218bbdfc1a9af32fc64844a992b911a0.jpg


    sort();

    3f1109fa96b022b69c004956329587c8fa2.jpg


    exchange();

    abc5f4d4c3fb292496eb6b444367166e653.jpg


    frequency();

    bcd1c4aef0e570068ec9765d25a7789f9d6.jpg

    /* ------------------- 反爬声明o(*▽*)咻咻咻 --------------------

    作者: 杨木发
    版权声明:
    本文为博主倾情原创文章,整篇转载请附上源文链接!

    如果觉得本文对你有所收获,你的请评论点赞 与

    合理优质的转发也将是鼓励支持我继续创作的动力,

    更多精彩可百度搜索 杨木发 或:

    个人网站: www.yangmufa.com

    开源中国: https://my.oschina.net/yangmufa

    Gitee: https://gitee.com/yangmufa

    GitHub: https://github.com/yangmufa

    坚持创作 善于总结 开源共享 高质进步。
    ------------------- 反爬声明o(*▽*)咻咻咻 -------------------- */

    展开全文
  • //刚开始定义结构体指针为p,但)0x100000是整型 //因此要强制转化为结构体指针再赋值给p printf("%p\n", p + 0x1);//0x1是16进制,表示1,p+0x1表示+1*20个字节,20 用16进制表示为 //0x00000014,因此p+0x1为0x...

     1.

                

     2.

    #include <stdio.h>
    struct Test//结构体的大小是20字节
    { 
    	int Num; 
    	char *pcName;
    	short sDate; 
    	char cha[2]; 
    	short sBa[4]; 
    }*p;
    int main()//假设p 的值为0x100000。 如下表表达式的值分别为多少?
                         //已知,结构体Test类型的变量大小是20个字节
    { 
    	p = (struct Test*)0x100000;//刚开始定义结构体指针为p,但)0x100000是整型
    	//因此要强制转化为结构体指针再赋值给p
    	printf("%p\n", p + 0x1);//0x1是16进制,表示1,p+0x1表示+1*20个字节,20 用16进制表示为
    	//0x00000014,因此p+0x1为0x10000014
    	printf("%p\n", (unsigned long)p + 0x1);//将强制转化为整型long类型,因此+0x1也就是+1,
    	//即结果为0x00100001
    	printf("%p\n", (unsigned int*)p + 0x1);//将p强制转化为整型指针类型,+1表示加0x00000004,
    	return 0; //因此结果为0x00100004.以上都是以地址形式打印,因此打印出来的没有0x.
    }             //若要打印出0x,则以printf("%#x\n")打印

    3.

        

     4.

     5.

    6.

     7.

     8.

      

     

           

    展开全文
  • } void sortReplication(){ //有四个字符串,实现将他们按照字符串中的字符个数从小到大排序, //再分别取出每个字符串的第三个字母形成一个新的字符串输出(若少于三个字符的输出*), //要求:利用字符串指针和...

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #define IO 996

    #define N 10

    #define input "%d,%d,%d,%d\n\n"

    void product();

    void sortReplication();

    void sort();

    void swap(int *,int);

    void exchange();

    void frequency();

    int subString(char *,char *);

    int main(int argc,char *argv[]){

    //product();

    //sortReplication();

    //sort();

    //exchange();

    //frequency();

    }

    void product(){

    //已知一个整形数组X[4],其元素值分别为3/10/4/20,使用指针求个数字元素的积。

    int x[]={3,10,4,20},i,product=1,*xp=&x[0];

    for(i=0;i<4;i++){

    product*=*(xp+i);//*xp+i

    //printf("%d\n",i);

    //printf("%d\n",*xp);

    //printf("%d\n",*xp+i);

    //printf("%d\n\n",product);

    }

    printf("%d\n\n",product);

    }

    void sortReplication(){

    //有四个字符串,实现将他们按照字符串中的字符个数从小到大排序,

    //再分别取出每个字符串的第三个字母形成一个新的字符串输出(若少于三个字符的输出*),

    //要求:利用字符串指针和指针数组完成。

    char *array[5]={"yangmufa","shuai","de","chaojishuai",}\

    ,(*tem)=NULL,t[5]={NULL};

    int i=0,j=0,k=0;

    for(i=0;i<4;i++){//i<4-1表示从第一个开始到倒数第二个结束(4个数组)

    k=i;//记录小串

    for(j=0;j<4;j++){//表示从第二个开始到倒数第一个结束,每一次比上一次比较次数减一

    if(strlen(array[k])>strlen(array[j])){

    k=j;//记录小串

    }

    if(i!=k){//交换

    tem=array[i];

    array[i]=array[k];

    array[k]=tem;

    }

    }

    }

    //分别取出每个字符串的第三个字母形成一个新的字符串

    for(i=0;i<4;i++){

    puts(*(array+i));

    if(strlen(*(array+i))>2){

    //*(*(array+4)+i)=*(*(array+1)+2);

    //此方法不可取因为"String"是存在静态存储区的,这个地址中的值不能被修改。

    t[i]=*(*(array+i)+2);

    }else if(strlen(*(array+i))<3){

    t[i]='*';

    }

    }

    printf("\n新字符串:%s\n\n",t);

    }

    void sort(){

    //定义一个动态数组长度为n,用随机数给各数组元素赋值,

    //然后对数组各单元排序,定义swap函数交换数据单元,要求参数使用指针传递。

    int n,i,*array;

    printf("输入长度:");

    scanf_s("%d",&n);

    array=(int*)malloc(n*sizeof(int));//以N为基数动态反配N个int类型大小的内存

    srand((unsigned)time(NULL));//设置以时间为随机种子

    printf("随机数排序前:");

    for(i=0;i

    array[i]=rand();//获取以时间为种子得来的随机数后赋值给array

    printf(" %d ",array[i]);

    }

    printf("\n");

    swap(array,n);

    }

    void swap(int * array,int lenth){

    int i=0,j=0,k=0,temp;

    printf("\n随机数排序后:");

    for(i;i

    k=i;

    for(j=0;j

    if(array[k]

    if(k!=i){

    temp=array[k];

    array[k]=array[i];

    array[i]=temp;

    }

    }

    }

    for(i=0;i

    printf(" %d ",array[i]);

    }

    printf("\n\n");

    }

    void exchange(){

    //输入N个整数,将其中最小的数与第一个数对换,将自重最大的数与与最大的数交换。

    int array[8],i,j,k,temp=0,max=0,min=0;

    srand((unsigned)time(NULL));//设置时间种子

    printf("随机数:");

    for(i=0;i<8;i++){

    array[i]=rand();//获取以时间为种子得来的随机数后赋值给array

    printf(" %d ",array[i]);

    }

    printf("\n交换后:");

    max=array[0];

    min=array[0];

    for(i=0;i<8-1;i++){

    if(max

    max=array[i];

    }//求出最大元素

    if(min>array[i]){

    min=array[i];

    }//求出最小元素

    }

    array[0]=min;//将其中最小的数与第一个数对换,

    array[7]=max;//将其中最大的数与与最大的数交换。

    for(i=0;i<8;i++){

    printf(" %d ",array[i]);

    }

    for(i=0;i<8;i++){

    k=i;

    for(j=0;j<8;j++){

    if(array[k]

    if(k!=i){

    temp=array[k];

    array[k]=array[i];

    array[i]=temp;

    }

    }

    }

    printf("\n排序后:");

    for(i=0;i<8;i++){

    printf(" %d ",array[i]);

    }

    printf("\nmax:%d\nmin:%d\n",max,min);

    }

    void frequency(){

    //计算字符串中子串出现的次数,要求用一个subString函数实现,

    //参数为指向字符串和子字符串的指针,返回次数。

    char array[]={"yangmufchaojiwudidashuaigeyangmufachaojishuai"},\

    SubString[]={"chaoji"};

    printf("字符串:");

    puts(SubString);

    printf("在字符串:");

    puts(array);

    printf("中出现了: ");

    printf(" %d 次\n",subString(array,SubString));

    }

    int subString(char *a,char *s){

    int i=0,j=0,count=0,alen=strlen(a),slen=strlen(s);

    while(i

    if(a[i]==s[j]){

    //如果子串第j个元素和母串的第i个元素相等则都继续指向下一个元素进行比较

    i++;

    j++;

    }else{

    //如果子串和母串出现不匹配则母串回到挡轮比较之前,子串归零

    i=i-j+1;

    j=0;

    }

    if(j==slen){

    //如果出现子串到最后一个元素均与母串相等的情况则出现次数加一,子串归零继续下一轮比较。

    count++;

    j=0;

    }

    }

    return count;

    }

    Result:

    product();

    9e3afb26279037f46f73455ed85602b9.png

    sortReplication();

    fa7157540814711214fb2062c01ef573.png

    sort();

    c0a6f675cf33262922787b43246cd790.png

    exchange();

    c00fed5379e41b47d8c4e8e9e83c1adf.png

    frequency();

    fc2ae3c7296954dabd245e3f9cbf4eeb.png

    版权声明:

    本文为博主原创文章,转载请附上源文链接!

    如果觉得我的论文对您有用,您的请评论点赞与

    合理优质的转发也将是鼓励支持我继续创作的动力!

    ---------------------*/

    展开全文
  • C语言练习(指针)及答案,公司内部培训经典题目及答案
  • 写出程序运行的结果(模拟程序的要求)题目1:用指针方法处理,输入3个整数,按由小到大的顺序输出#include //库函数说明void main()//main函数定义{void swap(int * pt1 , int * pt2);//自定义函数swap说明int n1, n2...
  • C语言指针练习题及答案一、选择题1. 变量的指针,其含义是指该变量的____.a)值 b)地址c)名 d)一个标志2.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是__ _.a)a,point,*&a b)&*a,&...
  • 很不错的。也包含了答案。适合考试,初学者的。
  • 试题四存在与试题三同样的问题,在执行char *str = (char *) malloc(100); 后未进行内存是否申请成功的判断; 另外,在free(str)后未置str为空,导致可能变成一个“野”指针
  • C语言指针例题

    万次阅读 多人点赞 2019-06-22 20:51:38
    指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出 #include <stdio.h> void swap(int *pa,int *pb) { int temp; temp = *pa; *pa = *pb; *pb = temp; } void main() { ...
  • C语言指针经典练习题-及答案》由会员分享,可在线阅读,更多相关《C语言指针经典练习题-及答案(14页珍藏版)》请在人人文库网上搜索。1、c语言指针练习和答案一、选择题1.指向变量的指针,其含义指变量的_ _ _ _。a...
  • C语言必知-指针练习题(附答案)

    千次阅读 2022-01-06 19:49:47
    C语言的三道经典指针运用的例题
  • C语言实用经典例题100

    2010-11-28 20:40:11
    里面有一百多个程序编程题及参考程序,对循环.指针.数组.函数调用等都有很好的例子,可以举一反三...
  • C语言进阶】C指针详解之练习(附解析)

    多人点赞 热门讨论 2021-08-24 21:56:22
    目录 一、数组sizeof/strlen的练习 (1)整形数组-sizeof函数 (2)字符数组-sizeof函数 (3)字符数组-strlen函数 (4)字符串数组-strlen函数 (5)字符串数组-strlen函数 (6)指针变量-sizeof函数 (7)指针...
  • 数组练习解答 1 定义一个名为 a 的单精度实型一维数组 长度为 4所有元素的初值均为 0 的数定义语句 是_ 分析按照一般数据定义语句的格式可以直接写出方法一参看答案 考虑到所有元 素均赋初值时可以省略数组长度可以...
  • C语言指针练习题及答案一、1. 变量的指针,其含义是指该变量的____. a)值 b)地址c)名 d)一个标志.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是__ _.a)a,point,*&a b)&*a,&a,*...
  • 零.前言 最近刚完成一篇c语言指针的超详解,趁热打铁搞点面试题来做一做呀,并为大家解析一波,让我们刷出自信,刷出问题,刷出offer,刷出你刚吃的晚饭(狗头保命)。
  • C语言指针练习题及答案一、选择题1. 变量的指针,其含义是指该变量的____.a)值 b)地址c)名 d)一个标志2.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是__ _.a)a,point,*&a b)&*a,&...
  • 指针 指针定义: 在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量...
  • C语言指针例题解析

    千次阅读 2017-08-05 21:54:36
    指针例题 指针加减整数 由例题可以知道,指针的类型决定指针能走多长。 ...指针不仅有数组指针,函数指针,还有更为复杂的指向函数指针的数组的指针。...指针还有很多经典且复杂的例题,希望大家能够共享并交流。...
  • C语言——例题

    2018-08-25 20:54:00
    例1-写一个函数,输入一行字符,将此字符串中最长的单词输出。 例2-建立一个对象数组,内放5个学生的数据(学号、成绩),用指针指向数组首元素,输出第一、三、五个学生的数据。
  • c语言100道经典例题详解

    万次阅读 多人点赞 2019-03-04 20:31:22
    c语言100道经典例题 ** 【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件...
  • c语言数组一些例题

    千次阅读 2021-05-20 14:17:41
    数组一些例题1.从键盘输入n个整数,统计所有下标为奇数且数组元素的值为偶数的个数。#includeint main(){int a[10]={};int num = 0;int i = 0;for(i=0;i<=9;i++){scanf("%d",&a[i]);}for(i=0;i<=9;i++){if...
  • C语言编程经典例题

    2021-05-20 10:08:24
    学习c语言编程的实战例题,非常典型的题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)1.程序分析:2.程序源代码:#include “stdio.h“ ...
  • C语言经典指针例题

    千次阅读 2018-11-23 11:55:31
    经典指针例题: main(){ int va[10],vb[10],*pa,*pb,i; pa=va; pb=vb; for(i=0;i&lt;3;i++,pa++,pb++){ *pa=i; pb=2i; printf("%d\t%d\n",*pa,*pb); } pa=&amp;va[0]; pb=&amp;vb[0]; printf...
  • 关于指针的一些经典例题详解

    多人点赞 热门讨论 2021-09-11 09:34:34
    指针学完之后,对指针是否深刻理解,以下是一些关于指针经典例题,通过例题可以回顾一下指针的相关内容: 代码示例1: int main() { int a[5] = { 1, 2, 3, 4, 5 }; int *ptr = (int *)(&a + 1); printf( "%d,...
  • C语言经典例题,内含100道,对初学者很有帮助

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,234
精华内容 493
关键字:

c语言指针经典例题