1 Star 0 Fork 0

LC.yulin/C.语言

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
test.7_4.c 2.92 KB
一键复制 编辑 原始数据 按行查看 历史
LC.yulin 提交于 2022-07-04 22:52 . C语言指针代码练习
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//int main()
//{
// int a[5] = { 1, 2, 3, 4, 5 };
// int* ptr = (int*)(&a + 1);
// //&a:取地址数组名,取出数组的地址,+1跳过整个数组
// // 数组的地址存放到数组指针中int(*)[5],所以强制类型转化为(int*)赋给ptr指针
// printf("%d,%d", *(a + 1), *(ptr - 1));
// //*(a+1):数组名表示数组首元素的地址,+1跳过四个字节
// //表示2的地址,解引用得到2这个元素
//
// //*(ptr-1)得到5这个元素
// return 0;
//}
//struct Test
//{
// int Num;
// char* pcName;
// short sDate;
// char cha[2];
// short sBa[4];
//}*p;//结构体指针(struct Test*)定义了一个全局变量p p==0x100000
////假设p 的值为0x100000。 如下表表达式的值分别为多少?
////已知,结构体Test类型的变量大小是20个字节
//int main()
//{
// printf("%p\n", p + 0x1);
// //p是一个结构体指针变量。+1跳过一个结构体的大小
// //p+20 ==>0x100014
// printf("%p\n", (unsigned long)p + 0x1);
// //将一个结构体指针强制类型转换为(unsigned long),+1就是给一个无符号长整形加一
// //p+1==>0x100001
// printf("%p\n", (unsigned int*)p + 0x1);
// //将一个结构体指针强制类型转换为(unsigned int*),+1跳过四个字节
// //p+1==>0x100004
// return 0;
//}
//int main()
//{
// int a[4] = { 1, 2, 3, 4 };
// int* ptr1 = (int*)(&a + 1);
// //&a取出数组的地址,+1跳过整个数组
// int* ptr2 = (int*)((int)a + 1);
// printf("%x,%x", ptr1[-1], *ptr2);
// //ptr1[-1] <==>*(ptr-1)得到4这个元素
// return 0;
//}
//int main()
//{
// int a[3][2] = { (0, 1), (2, 3), (4, 5) };
// //(),逗号表达式:从左向右依次执行,表达式的值为最后一个表达式的值
// //数组存放:1 3
// // 5 0
// // 0 0
// int* p;
// p = a[0];//数组名表示数组首元素的地址,二维数组首元素表示第一行,
// //数组名既没有单独放到sizeof内部,也没有&数组名,所以a[0]表示a[0][0]
// printf("%d", p[0]);//p[0]<==>*(p+0)==1
// return 0;
//}
//int main()
//{
// int a[5][5];
// int(*p)[4];
// p = a;
// //将一个五行五列的二维数组存放到一个有四个元素的数组指针中
// printf("%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);
// return 0;
//}
//int main()
//{
// int aa[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// int* ptr1 = (int*)(&aa + 1);
// //&数组名取出的是数组的地址,+1跳过整个数组
// int* ptr2 = (int*)(*(aa + 1));
// //数组名表示数组首元素的地址,二维数组首元素表示第一行,+1跳过第一行
// printf("%d,%d", *(ptr1 - 1), *(ptr2 - 1));
// //*(ptr1-1) == 10 *(ptr2-1) == 5
// return 0;
//}
//int main()
//{
// char* a[] = { "work","at","alibaba" };
// char** pa = a;
// pa++;
// printf("%s\n", *pa);
// return 0;
//}
//int main()
//{
// char* c[] = { "ENTER","NEW","POINT","FIRST" };
// char** cp[] = { c + 3,c + 2,c + 1,c };
// char*** cpp = cp;
// printf("%s\n", **++cpp);
// printf("%s\n", *-- * ++cpp + 3);
// printf("%s\n", *cpp[-2] + 3);
// printf("%s\n", cpp[-1][-1] + 1);
// return 0;
//}
#include<assert.h>
char* my_strcpy(char* dest, const char* src)
{
assert(dest && src);
char* ret = dest;
while (*dest++ = *src++)
{
;
}
return ret;
}
int main()
{
char arr1[] = "abcdef";
char arr2[20] = { 0 };
printf("%s\n", my_strcpy(arr2, arr1));
return 0;
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/lc-yulin/c-language.git
git@gitee.com:lc-yulin/c-language.git
lc-yulin
c-language
C.语言
master

搜索帮助