#include <stdio.h> #define N 4 int main() { int x[N]={1,9,8,4}; int i,*p=x; /*数组方式*/ for(i=0;i<N;i++) printf("%d",x[i]); printf("/n"); //指针方式1 for(i=0;i<N;i++) printf("%d",p[i]) ; printf("/n"); //指针方式2 for(;p<x+N;p++) printf("%d",*p) ; printf("/n"); //指针方式3 p=x; for(i=0;i<N;i++) printf("%d",*(p+i)) ; printf("/n"); return 0; }
1.2
#include <stdio.h> #define N 4 int main() { char x[N]={'1','9','8','4'}; int i; char *p; //数组方式 for(i=0;i<N;i++) printf("%c",x[i]); printf("/n"); //指针方式1 p=x; for(i=0;i<N;i++) printf("%c",p[i]); printf("/n"); //指针方式2 for(i=0;i<N;i++) printf("%c",*(p+i)); printf("/n"); //指针方式3 p=x; for(;p<x+N;p++) printf("%c",*p); printf("/n"); return 0; }
1、p地址是2000,++p为2004(整型)
2、p的地址是2000.++p的地址是2001(字符型)
3、不同的原因是不同的指针变量类型对应所占字节数不同
2
#include<stdio.h> int main() { int x[2][4] = { {1,9,8,4}, {2,0,2,2}} ; int i,j; int *p; int (*q)[4]; //数组名访问 for(i=0;i<2;i++) { for(j=0;j<4;j++) printf("%d",x[i][j]); printf("/n"); } //指针q访问(行指针) for(q=&x[0];q<x+2;q++) { for(j=0;j<4;j++) printf("%d",*(*q+j)); printf("/n"); } //指针p访问(列指针) for(p=&x[0][0],i=0;p<&x[0][0]+8;p++,i++) { printf("%d",*p); if((i+1)%4==0) printf("/n"); } return 0; }
1,2004
2.2016
2.1
#include<stdio.h> int main() { int x[2][4] = { {1,9,8,4}, {2,0,2,2}} ; int i,j; int *p; int (*q)[4]; //数组名访问 for(i=0;i<2;i++) { for(j=0;j<4;j++) printf("%d",x[i][j]); printf("/n"); } //指针q访问(行指针) for(q=&x[0];q<x+2;q++) { for(j=0;j<4;j++) printf("%d",*(*q+j)); printf("/n"); } //指针p访问(列指针) for(p=&x[0][0],i=0;p<&x[0][0]+8;p++,i++) { printf("%d",*p); if((i+1)%4==0) printf("/n"); } return 0; }
1.2001
2.2005
3.1与2是因为数据类型不同,p q不同是因为一个是行指针,一个是列指针。
3
#include <stdio.h> #include <string.h> #define N 80 int main() { char s1[] = "C, I love u."; char s2[] = "C, I hate u."; char tmp[N]; printf("sizeof(s1) vs. strlen(s1): /n"); printf("sizeof(s1) = %d/n", sizeof(s1)); printf("strlen(s1) = %d/n", strlen(s1)); printf("/nbefore swap: /n"); printf("s1: %s/n", s1); printf("s2: %s/n", s2); printf("/nswapping.../n"); strcpy(tmp, s1); strcpy(s1, s2); strcpy(s2, tmp); printf("/nafter swap: /n"); printf("s1: %s/n", s1); printf("s2: %s/n", s2); return 0; }
1.数组s1的大小是13
sizeof(s1)算数据类型在储存空间中占用字节数
strlen(s1)统计字符串的长度
2.不可以
3.交换了
3.1
#include <string.h> #define N 80 int main() { char *s1 = "C, I love u."; char *s2 = "C, I hate u."; char *tmp; printf("sizeof(s1) vs. strlen(s1): /n"); printf("sizeof(s1) = %d/n", sizeof(s1)); printf("strlen(s1) = %d/n", strlen(s1)); printf("/nbefore swap: /n"); printf("s1: %s/n", s1); printf("s2: %s/n", s2); printf("/nswapping.../n"); tmp = s1; s1 = s2; s2 = tmp; printf("/nafter swap: /n"); printf("s1: %s/n", s1); printf("s2: %s/n", s2); return 0; }
1.s1存放字符串首字母地址
sizeof统计char型指针变量占的字节数,strlen计算的是实际长度
2,可以
3,交换的是指针所指的位置,没有
4
原创文章,作者:jamestackk,如若转载,请注明出处:https://blog.ytso.com/267317.html