当前位置:网站首页>Pointer advanced, string function
Pointer advanced, string function
2022-07-07 08:47:00 【epsilon279】
List of articles
Pointer written test questions
1.
2.
3.
int main()
{
int a[4] = {
1, 2, 3, 4 };
int *ptr1 = (int *)(&a + 1);
int *ptr2 = (int *)((int)a + 1);
printf( "%x,%x", ptr1[-1], *ptr2);
return 0;
}
4.
#include <stdio.h>
int main()
{
int a[3][2] = {
(0, 1), (2, 3), (4, 5) };
int *p;
p = a[0];
printf( "%d", p[0]); //1
return 0;
}
5.
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;
}
6.
int main()
{
int aa[2][5] = {
1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int *ptr1 = (int *)(&aa + 1);
int *ptr2 = (int *)(*(aa + 1));
printf( "%d,%d", *(ptr1 - 1), *(ptr2 - 1));
return 0;
}
7.
#include <stdio.h>
int main()
{
char* a[] = {
"work","at","alibaba" };
char** pa = a;
pa++;
printf("%s\n", *pa);
return 0;
}
8.
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;
}
String function
strlen
size_t strlen ( const char * str );
The string has ‘\0’ As an end sign ,strlen Function returns in a string ‘\0’ The number of characters that appear before ( No package
contain ‘\0’ ).
The string that the argument points to must be in ‘\0’ end .
Note that the return value of the function is size_t, yes unsigned int.
strlen Error prone points in use
strlen Simulation Implementation
//1. Counter
#include <assert.h>
size_t my_strlen(const char* str)
{
assert(str);
size_t count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
int main()
{
char arr[] = "abcdef";
size_t n=my_strlen(arr);
printf("%u\n", n);//6
return 0;
}
//2. The pointer - The pointer
#include <assert.h>
size_t my_strlen(const char* str)
{
assert(str);
char* start = str;
size_t count = 0;
while (*str != '\0')
{
count++;
str++;
}
char* end = str;
return end-start;
}
int main()
{
char arr[] = "abcdef";
size_t n = my_strlen(arr);
printf("%u\n", n);
return 0;
}
//3. recursive
#include <assert.h>
size_t my_strlen(const char* str)
{
assert(str);
if (*str != '\0')
{
str++;
return (1 + my_strlen(str));
}
else
return 0;
}
int main()
{
char arr[] = "abcdef";
size_t n = my_strlen(arr);
printf("%u\n", n);
return 0;
}
strcpy
char * strcpy ( char * destination, const char * source );
Copies the C string pointed by source into the array pointed by destination, including the
terminating null character (and stopping at that point).
The source string must be in ‘\0’ end .
In the source string ‘\0’ Copy to target space .
The target space has to be large enough , To ensure that the source string can be stored .
The target space has to be variable .
Learn to simulate .
int main()
{
char name[20] = {
0 };
name = "zhangsan";//err,name The array name is the address , The address is a constant value , Do not modify , Cannot be assigned
printf("%s\n", name);
return 0;
}
The target space has to be variable .
int main()
{
const char* p = "abcdef";//err, Constant string cannot be modified
char arr[] = "bit";
strcpy(p, arr);
return 0;
}
A pointer to a string cannot be used to modify this string , Will make mistakes .
This is because :
char *p=“hello”; Equivalent to const char *m=“hello”;
For the pointer p, It's nothing more than a copy of an address , That is to say "hello" Copy of address .
"hello" Stored in static storage , This data cannot be modified .
Therefore, it cannot pass through the pointer p Modify the value of the data area
why char a[ ] You can modify the string
This is because : “hello” Stored in the stack space array , Array name a, The array name is the first address of the array .
char a[]=“hello”; From static storage ( The constant area ) Copy content ( namely hello) To the stack a[] therefore
therefore a[] It has its own hello copy , You can perform the desired legal operation , for example : Change the contents of the string .
strcpy Simulation Implementation
strcat
char * strcat ( char * destination, const char * source );
The source string must be in ‘\0’ end .
The target space must be large enough , It can hold the contents of the source string .
The target space must be modifiable .
strcat Simulation Implementation
The string appends itself , how ?
Is not workable , Because in the process of copying strings ’\0’ Be overwritten , Its own content is destroyed , The lack of ’\0’, Fall into a dead cycle .
边栏推荐
- ncs成都新电面试经验
- Novice entry SCM must understand those things
- Several ways of lambda used in functions in kotlin (higher-order functions)
- 如何在快应用中实现滑动操作组件
- AVL balanced binary search tree
- All about PDF crack, a complete solution to meet all your PDF needs
- Frequently Asked Coding Problems
- 下载和安装orcale database11.2.0.4
- 如何在HarmonyOS应用中集成App Linking服务
- 如何理解分布式架构和微服务架构呢
猜你喜欢
Calling the creation engine interface of Huawei game multimedia service returns error code 1002, error message: the params is error
Greenplum6.x搭建_安装
Golang compilation constraint / conditional compilation (/ / +build < tags>)
Category of IP address
Why choose cloud native database
联想混合云Lenovo xCloud:4大产品线+IT服务门户
数据分析方法论与前人经验总结2【笔记干货】
Input and output of floating point data (C language)
Compilation and linking of programs
Greenplum6.x-版本变化记录-常用手册
随机推荐
Iptables' state module (FTP service exercise)
Thirteen forms of lambda in kotlin
Implement your own dataset using bisenet
国标GB28181协议视频平台EasyGBS新增拉流超时配置
Appeler l'interface du moteur de création du service multimédia de jeu Huawei renvoie le Code d'erreur 1002, le message d'erreur: les paramètres sont l'erreur
Golang compilation constraint / conditional compilation (/ / +build < tags>)
Input and output of floating point data (C language)
JS operation
NCS Chengdu Xindian interview experience
uniapp 微信小程序监测网络
测试踩坑 - 当已有接口(或数据库表中)新增字段时,都需要注意哪些测试点?
Routing information protocol rip
【踩坑】nacos注册一直连接localhost:8848,no available server
ncs成都新电面试经验
Interpolation lookup (two methods)
National SMS center number inquiry
The field value in Splunk subquery fuzzy matching CSV is*
What is the method of manual wiring in PCB design in 22protel DXP_ Chengdu electromechanical Development Undertaking
Leetcode 1984. Minimum difference in student scores
[Yu Yue education] basic reference materials of electrical and electronic technology of Nanjing Institute of information technology